package java学习.第09章_异常处理;


public class B1_异常的处理之try {
    /**
     * 1. try - catch - finally
     * 处理异常:处理完继续执行接下来的操作
     * 2. throws + 异常
     * 抛出异常：后面不再执行
     */
    public static void main(String[] args) {
        sss();

    }
    private static int sss(){
        int a = 10;
        try {
            return a++;
        }catch (Exception e){
            System.out.println(new Object());
        }finally {//必定执行
            //如果 此程序有返回值 return xx;
            //他会先执行 xx 在返回给调用着之前 执行 finally
            //也就是在 xx 之后执行  return之前执行
            System.out.println(a);//输出 11
        }
        return a++;
    }

    private static void 异常的介绍() {
        B1_异常的处理之try b = new B1_异常的处理之try();


        try {
            b.ss();
        } catch (ArithmeticException e) {//处理的异常
            e.printStackTrace();//红色的输出 所有错误信息
            System.out.println(e);
            /*
             * Exception in thread "main" java.lang.ArithmeticException: / by zero
             * 	at java学习.第09章_异常处理.B_异常的处理.main(B_异常的处理.java:12)
             */

            System.out.println("getStackTrace(): 以下是错误的一行行描述 打印出错误的详细位置");
            StackTraceElement[] newStack = new StackTraceElement[3];
            StackTraceElement[] getStack = e.getStackTrace();
            for (int i = 0; i < getStack.length;i++) {
                //at java学习.第09章_异常处理.B_异常的处理.main(B_异常的处理.java:12)
                System.out.println("第" + i + "个：" + getStack[i]);
            }

            System.out.println("getStackTrace()  结束");

            //java.lang.ArithmeticException: / by zero
            System.out.println("fillInStackTrace():" + e.fillInStackTrace()); //等于e.toString()
            // by zero
            System.out.println("getMessage():" + e.getMessage());
            // by zero
            System.out.println("getMessage():" + e.getLocalizedMessage());
            for (Throwable t:e.getSuppressed()) {
                System.out.println("s?????" + t.getStackTrace());
            }

        } catch (RuntimeException e) {//处理的异常
            System.out.println(e.fillInStackTrace());
        } catch (Exception e) {
            //此处异常不能是上一个异常的 子类 或相同
            //     也不能是下一个异常的 父类 或相同

        } catch (Throwable e) {

        } finally {//常用来关闭资源  比如文件的操作
            //如果 此程序有返回值 return
            System.out.println("无论怎么样，此处代码必定执行，包括 return");
        }
        //不出异常此处代码开始执行
    }

    public   void ss1() throws RuntimeException{
        System.err.println("1");//必定在其他非红色字体前面
        ss2();
    }
    public  void ss2() throws RuntimeException{
        int i = 1/0;
    }
    public  void ss() throws RuntimeException{
        ss1();
    }
}
